package com.ccp.dev.form.service;

import com.ccp.dev.core.basic.base.BaseService;
import com.ccp.dev.core.basic.util.UUIDUtils;
import com.ccp.dev.core.util.StringUtil;
import com.ccp.dev.form.dao.PrintTemplateDao;
import com.ccp.dev.form.model.PrintTemplate;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import javax.annotation.Resource;
import java.util.List;

/**
 * PRINT_TEMPLATE service类
 *
 * @author chenjing
 */
@Service
public class PrintTemplateService extends BaseService<PrintTemplate> {

    @Resource
    private PrintTemplateDao printTemplateDao;

    /**
     *  获取默认打印模板
     * @param formKey formKey
     * @return printTemplate
     */
    public PrintTemplate getDefaultPrintTemplateByFormKey(String formKey){
        return printTemplateDao.getDefaultByFormKey(formKey);
    }

    /**
     * 获取所有普通表单标识的对象集
     * @param formKey
     * @return
     */
    public List<PrintTemplate> getAllByFormKeyAndForm(String formKey) {
        return printTemplateDao.getAllByFormKeyAndForm(formKey);
    }

    /**
     * 设置默认打印模板
     * @param id id
     * @param formKey formKey
     */
    @Transactional(rollbackFor = Exception.class)
    public void setDefault(String id,String formKey){
        PrintTemplate oldDefaultPrintTemplate=printTemplateDao.getDefaultByFormKey(formKey);
        if(oldDefaultPrintTemplate!=null) {
            updateDefaultPrintTemplate(oldDefaultPrintTemplate, PrintTemplate.IS_NOT_DEFAULT);
        }
        PrintTemplate newDefaultPrintTemplate=printTemplateDao.getById(id);
        updateDefaultPrintTemplate(newDefaultPrintTemplate,PrintTemplate.IS_DEFAULT);
    }

    /**
     *  更新默认打印模板函数
     * @param printTemplate printTemplate
     * @param isDefault isDefault
     */
    private void updateDefaultPrintTemplate(PrintTemplate printTemplate,Short isDefault){
        printTemplate.setIsDefault(isDefault);
        printTemplateDao.update(printTemplate);
    }

    /**
     * 判断别名是否存在
     * @param alias alias
     * @param id id
     * @return isExist
     */
    public boolean isExistAlias(String alias,String id){
        return printTemplateDao.isExistAlias(alias,id)>0;
    }

    /**
     * 根据id删除对应打印模板
     * @param id printId
     */
    @Transactional(rollbackFor = Exception.class)
    public void delByPrintId(String id){
        printTemplateDao.delById(id);
    }

    /**
     * 添加或更新打印模板
     * @param printTemplate printTemplate
     */
    @Transactional(rollbackFor = Exception.class)
    public void save(PrintTemplate printTemplate) {
        if(StringUtil.isEmpty(printTemplate.getId())){
            printTemplate.setId(UUIDUtils.getUUIDFor32());
            PrintTemplate defaultPrint=printTemplateDao.getDefaultByFormKey(printTemplate.getFormKey());
            printTemplate.setIsDefault(PrintTemplate.IS_NOT_DEFAULT);
            if(defaultPrint == null){
                printTemplate.setIsDefault(PrintTemplate.IS_DEFAULT);
            }
            printTemplateDao.add(printTemplate);
        }else {
            printTemplateDao.update(printTemplate);
        }
    }

    /**
     * 获取所有流程结束后显示的打印的对象集
     * @param formKey
     * @return
     */
    public List<PrintTemplate> getAllByFormKeyAndFlowFinish(String formKey) {
        return printTemplateDao.getAllByFormKeyAndFlowFinish(formKey);
    }
}